#ifndef __TIMTASK_H
#define __TIMTASK_H
#include "Pub_typedef.h"
#include "stdlib.h"
#include "tim.h"

#define TASK_GET_TIM_BASE	    (htim4.Instance->CNT)
//定时器时钟除预分频值为定时器频率，周期为100us。软定时为毫秒级
//		TIM:		        主频     预分频
#define TASK_Tim_ratio		    (( 72000000 / 7200 ) / 1000 )


typedef struct
{
    INT16U uinTimerRec;
    INT32U ulSoftTim;
    INT32U ulInterval;

    INT32U 	ulTmr;
    INT8U	uchStop;
    
    INT8U	uchReadState;
}TIM_TASK_SOFTTIM;

typedef struct t_TIM_TASK
{
    INT32U id;
    TIM_TASK_SOFTTIM stTimer;
    void (*pTaskFun)(void);
    INT32U Last_ID;             // 头节点使用,用于记录最大id
    struct t_TIM_TASK * next;
}TIM_TASK;


void  TimTask_Init(TIM_TASK *pstTT);
INT8U TimTaskFindID(const TIM_TASK *pTask, INT32U ID);
INT8U TimTaskStartID(TIM_TASK *pTask, INT32U id);
INT8U TimTaskStopID(TIM_TASK *pTask, INT32U id);
INT32U TimTaskAddTask(TIM_TASK *pTask, INT32U ulTime, void (*pfun)(void));
INT8U TimTaskDelTask(TIM_TASK *pTask, INT32U id);
void  TimTaskHandle(TIM_TASK *pTask);


static void ReadTimBase(TIM_TASK_SOFTTIM *pstTimVal);
static void STimInit(TIM_TASK_SOFTTIM *pstSoftTimClass);
static void set(TIM_TASK_SOFTTIM *pstTimVal,INT32U ulTime);
static void Start(TIM_TASK_SOFTTIM *pstTimVal);
static void Stop(TIM_TASK_SOFTTIM *pstTimVal);
static INT8S Timout(TIM_TASK_SOFTTIM *pstTimVal);

#endif


